package com.tpl.core.basedata.service;

import com.tpl.core.entity.SessionUser;
import com.tpl.core.entity.sys.Menu;
import com.tpl.core.entity.sys.Role;
import com.tpl.core.entity.sys.User;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.List;
import java.util.Map;


/**
 * 说明 :权限接口
 * @author <a href="mailto:3380084@gmail.com">张坤雷</a>
 * @version 创建时间：2013-6-26 下午2:22:37
 *
 */
public interface AuthService {
	/**
	 * 获取所有菜单
	 * @return
	 */
	List<Menu> getAllOperator();
	/**
	 * 获取自己所有角色
	 * @param userId
	 * @return
	 */
	List<Role> getOwnerRoles(Long userId);
	/**
	 * 获取所有角色与菜单的对应关系
	 * @return
	 */
	Map<Long, List<Menu>> getRoleReMenu();

	/**
	 * 根据菜单编码获取全路径
	 * @param id
	 * @return
	 */
	List<Menu> doGetMenuName(String menuNo);
	SessionUser doLogin(User user);

	void removeLock(String userNo, Object object);


	public void doChangePwd(User user,String newPwd);

	/**
	 *
	 * 说明 :获取当前登录用户的所有部门
	 */
	JSONArray getUserDept(SessionUser user);
	/**
	 *
	 * 说明 :改变用户的默认部门
	 */
	void changeDefaultDept(Long deptId, Long userId);
	/**
	 *
	 * 说明 :获取操作树
	 * @param key 树缓存KEY
	 * @param user
	 */
	List<? extends Menu> getMenu(String key, SessionUser user);
	/**
	 *
	 * 说明 :写操作记录
	 * @param operator 菜单信息
	 * @param user 操作用户
	 * @param ip 操作用户IP
	 * @param type TODO
	 */
	void doWriteOperatorLog(Menu operator, SessionUser user, String ip, Integer type);

	/**
	 * 获取资源锁
	 * @param menuNo
	 * @return
	 */
	JSONObject getMenuLock(String menuNo);
	/**
	 * 给资源加锁
	 * @param id
	 * @param menuNo
	 * @param userNo
	 * @param curDate
	 * @param lockType
	 */
	void saveMenuLock(Long id, String menuNo, String userNo,String userName, String curDate, Integer lockType);
	/**
	 * 清除用户锁
	 * @param userNo
	 */
	void removeLock(String userNo,String menuNo);
	/**
	 * 降级资源锁
	 */
	void downLock(String menuNo,String curDate);
	/**
	 * 验证权限
	 * @param appId
	 * @param secret
	 * @param ip
	 * @param url
	 * @return
	 */
	Boolean checkAuth(String appId, String secret, String ip, String url);

}
